/**
 * 提前退出程序
 *   在 C++ 中，暂停是作为函数（而不是关键字）实现的
 * 
 * std::exit()
 *   std::exit()是一个导致程序正常终止的函数
 * 
 * 显式调用 std::exit()
 *   尽管std::exit()在函数结束时隐式调用main()，std::exit()但也可以在程序正常终止之前显式调用以停止程序。当std::exit()以这种方式调用时，需要包含cstdlib标头。
 *   显式调用std::exit()函数不会清理当前函数中的局部变量或调用堆栈。通常最好避免调用std::exit()
 * 
 * std::atexit()
 *   可以注册一个在退出程序前调用的清理函数
 *   
 * 
 */

#include <cstdlib> // for std::exit()
#include <iostream>

void cleanup()
{
    // code here to do any kind of cleanup required
    std::cout << "cleanup!\n";
}

void cleanup2() {
    std::cout << "clean2...\n";
}

int main()
{
    // register cleanup() to be called automatically when std::exit() is called
    std::atexit(cleanup2);

    std::cout << 1 << '\n';
    cleanup();

    std::exit(0); // terminate and return status code 0 to operating system

    // The following statements never execute
    std::cout << 2 << '\n';

    return 0;
}